package usercenter

import (
	"context"
	"fmt"
	"github.com/zeromicro/go-zero/core/stores/cache"
	"github.com/zeromicro/go-zero/core/stores/sqlx"
	"navi-mumbai/common/gensql"
)

var _ UserInviteConfigModel = (*customUserInviteConfigModel)(nil)

type (
	// UserInviteConfigModel is an interface to be customized, add more methods here,
	// and implement the added methods in customUserInviteConfigModel.
	UserInviteConfigModel interface {
		userInviteConfigModel
		Find(ctx context.Context) ([]*UserInviteConfig, error)
	}

	customUserInviteConfigModel struct {
		*defaultUserInviteConfigModel
		genSql *gensql.GenSql
	}
)

func (m *customUserInviteConfigModel) Find(ctx context.Context) ([]*UserInviteConfig, error) {
	resp := make([]*UserInviteConfig, 0)
	query := fmt.Sprintf("select %s from %s ", userInviteConfigRows, m.table)
	err := m.QueryRowsNoCacheCtx(ctx, &resp, query)
	switch err {
	case nil:
		return resp, nil
	default:
		return nil, err
	}
}

// NewUserInviteConfigModel returns a model for the database table.
func NewUserInviteConfigModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) UserInviteConfigModel {
	return &customUserInviteConfigModel{
		defaultUserInviteConfigModel: newUserInviteConfigModel(conn, c, opts...),
		genSql:                       gensql.NewGenSql(),
	}
}
